﻿/************************************************************************
 * 
 *   文件描述： 业务逻辑提交类
 *   创建信息： 王喆    2007-12-17
 *   修改信息： 
 * 
 ************************************************************************/

using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Data.SQLite;
using System.Data;

namespace LiteFrame
{
    public class Common
    {
        private static DataHelper dhInvoke;
        static Common()
        {
            dhInvoke = new DataHelper(Pubs.KernelDB);
        }
        // 提交执行对象
        //Invoke方法通过在MethodName中寻找Retrieve/Trans关键字来判断使用那个方法执行数据库操作。
        //Retrieve表示返回DataSet，Trans表示在使用中运行。
        //Invoke调用的结果应该返回一个DataCommand，在此直接执行。
        public static BOResponse Invoke(BORequest rq)
        {
            BOResponse rp = new BOResponse(0,null,null);
            if (ACCheck(rq))    // 检查执行权限
            {
                Type BOType = Type.GetType(rq.BoName);
                MethodInfo BOMethod = BOType.GetMethod(rq.BoMethod);
                // 得到查询对象
                SQLiteCommand cmdObj = (SQLiteCommand)BOMethod.Invoke(rq.BExecObject,null);
                try
                {
                    if (rq.BoMethod.ToUpper().Contains("retrieve".ToUpper()))
                    {
                        // 执行SqlExecQuery方法
                        DataSet dsRet = dhInvoke.ExecSqlQuery(cmdObj);
                    }
                    else
                    {
                        // 执行SqlExecNonQuery方法
                    }
                }
                catch (System.Exception err)
                {
                    // eg: ErrKey="unique ... Email",ErrSource="BL_Users.Register"     ErrMsg="注册失败：该邮件地址已被登记，请使用其他邮件地址进行注册！"
                    throw new Exception(GetErrMsg(err.Message ,rq.BoName + rq.BoMethod));
                }

                // 
            }
            else
            {
                // 没有操作权限。
                rp = new BOResponse(-1001, "您没有执行本操作的权限，请与管理员联系。", null);
            }
            return rp;
        }

        /// <summary>
        /// 检查执行人是否具有逻辑单元的权限
        /// </summary>
        /// <param name="rp"></param>
        /// <returns></returns>
        private static bool ACCheck(BORequest rq)
        {
            // 
            return true;
        }

        /// <summary>
        /// 获得错误信息
        /// </summary>
        /// <param name="Key1"></param>
        /// <param name="Key2"></param>
        /// <returns></returns>
        public static string GetErrMsg(string ErrKey, string ErrSource)
        {
            //查询数据库，返回操作的错误信息。
            return string.Empty;
        }

    }
}
